[Ajuda] Loop Do-While.

1. [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 17/06/2010 - 23:10h

Olá, pessoal.
Estou com uma dificuldade, recebi um exercício na faculdade e não consegui fazer.
Segue:
Faça um programa em C que leia um caracter do teclado sem ecoar na tela (de modo que quem digitou não consiga ver o que foi digitado) e em seguida leia uma seqüência de caracteres até que seja digitado novamente o primeiro carater lido.
Mais o professor só ensinou o básico do do-while. Ele ensinou apenas a sintaxe:
do
{
<lista de comandos>
} while (<cond>);

E no código, eu não consegui :S
Eu quebrei a cabeça aqui um pouco mais não saiu, fica ai o que eu fiz:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, tecla;
int tenso = 1;
letra = getch();
letra = toupper(letra); // Converte a letra para maiúscula.

do
{
for(tenso = -00000.1; tenso <= 9999999999999999999999999; tenso++)
{
printf("%d", tenso);
}
}
while((letra = getch()) && (letra != letra));

system("pause>nul");
return (0);
}





  


2. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 18/06/2010 - 08:48h

Sam L.,
Eu consegui melhorar meu código, olha como ficou:

char letra;
int i = 1;
letra = getch();
letra = toupper(letra);

do
{
printf("%d", i);
i++;
}
while(( i <= 999999999999) && (letra != letra));

Agora está dando problema no Loop. Quando eu uso "&&" o programa da problema no Loop, mais ou menos assim:

Letra digitada: A
1 <- Só conta até 1. Se eu digitar 'A' novamente ele fecha e se eu digitar outra letra ele vai pro 2 e assim por diante.

Quando eu uso "||" o problema fica no digito, o Loop conta normalmente mais na hora de pressionar a mesma tecla ele não fecha, mais ou menos assim:

Letra digitada: A
12345678910111213141516171819.. até 999999999999 <- Quando eu pressiono a mesma letra que foi pressionada para início do programa ele não fecha, nem pressionando outra :S

Alguém pode ajuda? '-'


3. Re: [Ajuda] Loop Do-While.

Andi
upc0d3

(usa Gentoo)

Enviado em 18/06/2010 - 13:43h

Cara tu tem um mínimo de idéia do que esta fazendo ?
Parou para pensar ? Pegou um papel e um lápis, fez teste de mesa ?
O código é muito simples de se fazer, veja uma idéia básica: Leia um único 'char', após limpe a tela (o usuário não pode ver, certo?), em seguida leia um 'char' por vez e compare com o 'char' inial.

Agora vamos ao teu código:

=================================================
#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, tecla;
int tenso = 1; /* Para que isto ? */
letra = getch(); /* Jesus amado, o usuário não é nem informado sobre o que ele esta fazendo, por que ? */

letra = toupper(letra); // Converte a letra para maiúscula.

do
{
/* O que diabos este 'for', tem que fazer ? Pra mim, este for está gritando: "Eu não sei o que eu estou fazendo."

Outra coisa, 'tenso' é uma variável INT, e não FLOAT. */

for(tenso = -00000.1; tenso <= 9999999999999999999999999; tenso++)
{
printf("%d", tenso);
}
}
/* Está errado, tu está lendo, por exemplo 'A', e está comparando com 'A'. */
while((letra = getch()) && (letra != letra));

system("pause>nul"); /* Isso não existe, e não utilize chamada de sistema, não sabe nem o básico de programação ainda. */

return (0);
}

============================================================

Tudo que eu falei no teu código esta em forma de comentário.
Meu conselho final, exclua este código, com SHIFT + DELETE (se for windows, o que eu sei que é), e comece de novo.

Até.


4. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 18/06/2010 - 15:24h

Consegui fazer :}

#include <stdio.h>
#include <stdlib.h>

int main()
{
char letra, letra2;
int i = 1;
letra = getch();
letra = toupper(letra);

do
{
printf("%d", i);
i++;
letra2 = getch();
letra2 = toupper(letra2);
}
while((i <= 1000000) && (letra2 != letra));



system("pause>nul");
return (0);
}

Upc0d3,
Sabe ler, né? Então vamos explicar para tu, lêia o exercício e depois minha explicação.

Faça um programa em C que leia um caracter do teclado sem ecoar na tela (de modo que quem digitou não consiga ver o que foi digitado) e em seguida leia uma seqüência de caracteres até que seja digitado novamente o primeiro carater lido.

letra = getch(); // Lê um caracter sem ecoar na tela *:
int i = 1; /* Váriavel que irá contar -.-" */
Naquele for eu viajei legal D:
O resto é auto explicativo :}
Ah, ja ia me esquecendo.
system("pause>nul"); /* Isso não existe aonde? Só se for no teu compilador, o meu compilador lê sem o menor problema. E antes de tu falar que eu tirei isso do orifício retal, foi meu professor de C quem aconselhou usar isso, para facilitar a leitura. */
Mesmo assim, upc0d3, valeu pelas críticas, sem críticas = sem avanço.


Valeu ai a todos,
Até a próxima '-'


5. Re: [Ajuda] Loop Do-While.

Andi
upc0d3

(usa Gentoo)

Enviado em 18/06/2010 - 21:36h

Sim, eu sei ler. E tambem sei responder.

Vamos la.
" Ah, ja ia me esquecendo.
system("pause>nul"); /* Isso não existe aonde? Só se for no teu compilador, o meu compilador lê sem o menor problema. E antes de tu falar que eu tirei isso do orifício retal, foi meu professor de C quem aconselhou usar isso, para facilitar a leitura. */ "

Se tu soubesse ler, e soubesse do que eu estou falando, nao cairia na besteira de responder a idiotice assim. Eh obvio que "system", compila, pois como eu JA disse, isto eh uma CHAMADA DE SISTEMA. O que nao existe, pelo menos, nao conheco eh este, "pause > nul". O que eu conhece eh apenas "pause".

Teu professor falou para ti usar isso ? Vou fingir que nao li isto.

Use recursos da linguagem, como tu nao teve a capacidade de pesquisar, eu lhe digo, tiro isso e coloque "getchar()".


"Mesmo assim, upc0d3, valeu pelas críticas, sem críticas = sem avanço."

Sem avanco ? Engracado, tu arrumou no codigo, a comparacao da letra com a letra, depois de eu ti dizer que estava errado. Viu a cagada do teu 'for'. Tu realmente acha que minhas criticas nao lhe ajudaram em nada ?

" letra = getch(); // Lê um caracter sem ecoar na tela *: "

Vou repetir, o usuario, NAO SABE O QUE ESTA ACONTECENDO NO PROGRAMA, TU MESMO EH CAPAZ DE RODAR TEU PROGRAMA E NAO SABER O QUE ELE FAZ. PRESTA A ATENCAO NO TEU CODIGO.

Ate.



6. Re: [Ajuda] Loop Do-While.

Ricardo
rM_

(usa Outra)

Enviado em 19/06/2010 - 11:59h

" >nul" é para não aparecer a seguinte frase: Pressione qualquer tecla para continuar, blá, blá, blá.

"Sem avanco ? Engracado, tu arrumou no codigo, a comparacao da letra com a letra, depois de eu ti dizer que estava errado. Viu a cagada do teu 'for'. Tu realmente acha que minhas criticas nao lhe ajudaram em nada ?"
Tu num intendeu o que eu falei, eu disse: Sem críticas = sem avanço, ou seja, se não houver críticas construtivas a coisa não flui. Eu não falei que tu não me ajudou com suas críticas, muito pelo contrário, ajudou muito ^^

"letra = getch(); // Lê um caracter sem ecoar na tela"
E isso faz parte do exercício, ler um caracter sem ECOAR na tela.

Abrass,
Fui.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts